package mylogger

import (
	"fmt"
	"os"
	"time"
)

// 往终端中打印日志
type ConsoleLogger struct {
	level Level
}

// 文件结构体的构造函数
func NewConsoleLogger(levelStr string) *ConsoleLogger {
	logLevel := parseLogLevel(levelStr)
	cl := &ConsoleLogger{
		level: logLevel,
	}
	return cl
}

// 将公用的记录日志的功能的封装成一个单独的方法
func (c *ConsoleLogger) consoleLog(level Level, format string, args ...interface{}) {
	if c.level > level {
		return
	}
	msg := fmt.Sprintf(format, args...) // 得到用户要记录的日志
	// 日志格式 [时间][文件:行号][函数名][日志级别] 日志信息
	nowStr := time.Now().Format("2006-01-02 15:04") // 当前时间

	fileName, line, funcName := getCallerInfo(3)

	logLevelStr := getLevelStr(level)
	lgoMsg := fmt.Sprintf("[%s][%s:%d][%s][%s] %s",
		nowStr, fileName, line, funcName, logLevelStr, msg)

	fmt.Fprintln(os.Stdout, lgoMsg) // 利用 fmt包将msg写入f.file文件中
}

// Debug debug方法
func (c *ConsoleLogger) Debug(format string, args ...interface{}) {
	c.consoleLog(DebugLevel, format, args...)
}

// Info info级别的日志
func (c *ConsoleLogger) Info(format string, args ...interface{}) {
	c.consoleLog(InfoLevel, format, args...)
}

// Warning warning级别的日志
func (c *ConsoleLogger) Warning(format string, args ...interface{}) {
	c.consoleLog(WarningLevel, format, args...)
}

// Error error级别的日志
func (c *ConsoleLogger) Error(format string, args ...interface{}) {
	c.consoleLog(ErrorLevel, format, args...)
}

// Fatal fatal级别的日志
func (c *ConsoleLogger) Fatal(format string, args ...interface{}) {
	c.consoleLog(FatalLevel, format, args...)
}

// 关闭文件
func (c *ConsoleLogger) Close() {

}
